package com.example.day9_sqlite2;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

/***
 数据库掌握：
 1。使用sql语句执行增删改查
 2。使用方法执行增删改查
 3。事务
 举例：一次性插入500条数据，使用事务耗时98毫秒 不使用5000毫秒左右
 举例：银行转账，一个账户-500，一个账户+500，使用事物同时成功 同时失败 安全





 */
public class MainActivity extends AppCompatActivity {
    private MyHelper myHelper;
    private SQLiteDatabase sqLiteDatabase;//数据库对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myHelper = new MyHelper(this);
        sqLiteDatabase = myHelper.getWritableDatabase();
        findViewById(R.id.bt_insert).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                insert();
            }
        });
        findViewById(R.id.bt_select).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                select();
            }
        });
        findViewById(R.id.bt_update).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                update();
            }
        });
        findViewById(R.id.bt_delete).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { delete();
            }
        });
        findViewById(R.id.bt_insert_one).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { insert1();
            }
        });
        findViewById(R.id.bt_insert_two).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                insert2();
            }
        });
    }
    private void update() {
        //  sqLiteDatabase.execSQL("");
        ContentValues contentValues = new ContentValues();
        contentValues.put("name","王晓龙");
        //参数一 表名 参数二 要修改值 参数三 条件 参数四 为条件中的？赋值
        int num = sqLiteDatabase.update("user", contentValues, "id = ?",
                new String[]{6 + ""});
        Toast.makeText(this, "成功修改了"+num, Toast.LENGTH_SHORT).show();

    }

    private void delete() {
        //sqLiteDatabase.execSQL("");
        //参数一 表名 参数二 条件 参数三 为条件中的？赋值
        int num = sqLiteDatabase.delete("user", "id > ?", new String[]{7 + ""});
        Toast.makeText(this, "成功删除了"+num+"条数据", Toast.LENGTH_SHORT).show();

    }

    private void select() {
        //String table, String[] columns, String selection,
        //            String[] selectionArgs, String groupBy, String having,
        //            String orderBy
        // sqLiteDatabase.rawQuery("",new String[]{});
        //参数一 表名 参数二 要查询的字段，如果查询全部給null 参数三 查询条件 where 参数四 为？赋值 参数五/六分组  参数七 排序
        //查询全部数据
        //    Cursor cursor = sqLiteDatabase.query("user", null, null, null, null, null, null);
        //查询id>5
        //    Cursor cursor = sqLiteDatabase.query("user", null, " id > ?", new String[]{5+""}, null, null, null);
        //    Cursor cursor = sqLiteDatabase.query("user", new String[]{"name"}, " id > ?", new String[]{5+""}, null, null, null);
        //按照id倒序排序
        Cursor cursor = sqLiteDatabase.query("user", null, " id > ?",
                new String[]{5+""},
                null, null, "id desc");
        if(cursor != null){
            while (cursor.moveToNext()){
                int id = cursor.getInt(0);
                String name = cursor.getString(1);
                String password = cursor.getString(2);
                Log.d("ytx", "id: "+id+"name:"+name+"password:"+password);

            }
        }
    }

    private void insert() {
        //   sqLiteDatabase.execSQL("");
        ContentValues contentValues = new ContentValues();
        contentValues.put("name","姚甜雪");
        contentValues.put("password","123456");
        //参数一 表名 参数二 不赋值默认为null 参数三 插入的数据
        long num = sqLiteDatabase.insert("user",null,contentValues);
        Log.d("ytx", "num: "+num);
    }

    //使用事务一次性插入500条数据
    private void insert2() {
        long start = System.currentTimeMillis();
        sqLiteDatabase.beginTransaction();//开启事物

        for (int i =0 ;i<500;i++){
            ContentValues contentValues = new ContentValues();
            contentValues.put("name","姚甜雪");
            contentValues.put("password","123456");
            sqLiteDatabase.insert("user",null,contentValues);
        }
        sqLiteDatabase.setTransactionSuccessful();//成功
        sqLiteDatabase.endTransaction();//结束事务
        long end = System.currentTimeMillis();
        Log.d("ytx", "耗时: "+(end-start));


    }
    //不使用事务一次性插入500条数据
    private void insert1() {
        long start = System.currentTimeMillis();
        for (int i =0 ;i<500;i++){
            ContentValues contentValues = new ContentValues();
            contentValues.put("name","姚甜雪");
            contentValues.put("password","123456");
            sqLiteDatabase.insert("user",null,contentValues);
        }
        long end = System.currentTimeMillis();
        Log.d("ytx", "耗时: "+(end-start));


    }


}
